/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package controldepuntos.clases;

import controldepuntos.pantallas.ARCatalogoFalta;
import controldepuntos.pantallas.Alumnos;
import java.io.Serializable;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.Collection;
import javax.persistence.Basic;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.OneToMany;
import javax.persistence.Table;
import javax.swing.JOptionPane;

/**
 *
 * @author Víctor
 */
@Entity
@Table(name = "tr_alumno")
@NamedQueries({
    @NamedQuery(name = "TrAlumno.findAll", query = "SELECT t FROM TrAlumno t")})
public class TrAlumno implements Serializable {
    private static final long serialVersionUID = 1L;
    @Id
    @Basic(optional = false)
    @Column(name = "id_alumno")
    private Integer idAlumno;
    @Column(name = "nombre")
    private String nombre;
    @Basic(optional = false)
    @Column(name = "ap_paterno")
    private String apPaterno;
    @Column(name = "ap_materno")
    private String apMaterno;
    @Basic(optional = false)
    @Column(name = "grado")
    private int grado;
    @Basic(optional = false)
    @Column(name = "grupo")
    private String grupo;
    @Basic(optional = false)
    @Column(name = "puntos")
    private int puntos;
    @Basic(optional = false)
    @Column(name = "numero_de_control")
    private String numeroDeControl;
    @OneToMany(mappedBy = "idAlumno")
    private Collection<TrIncidente> trIncidenteCollection;
    @JoinColumn(name = "id_usuario", referencedColumnName = "id_usuario")
    @ManyToOne
    private Integer idUsuario;

    public TrAlumno() {
    }

    public TrAlumno(Integer idAlumno) {
        this.idAlumno = idAlumno;
    }

    public TrAlumno(Integer idAlumno, String apPaterno, int grado, String grupo, int puntos, String numeroDeControl) {
        this.idAlumno = idAlumno;
        this.apPaterno = apPaterno;
        this.grado = grado;
        this.grupo = grupo;
        this.puntos = puntos;
        this.numeroDeControl = numeroDeControl;
    }

    public Integer getIdAlumno() {
        return idAlumno;
    }

    public void setIdAlumno(Integer idAlumno) {
        this.idAlumno = idAlumno;
    }

    public String getNombre() {
        return nombre;
    }

    public void setNombre(String nombre) {
        this.nombre = nombre;
    }

    public String getApPaterno() {
        return apPaterno;
    }

    public void setApPaterno(String apPaterno) {
        this.apPaterno = apPaterno;
    }

    public String getApMaterno() {
        return apMaterno;
    }

    public void setApMaterno(String apMaterno) {
        this.apMaterno = apMaterno;
    }

    public int getGrado() {
        return grado;
    }

    public void setGrado(int grado) {
        this.grado = grado;
    }

    public String getGrupo() {
        return grupo;
    }

    public void setGrupo(String grupo) {
        this.grupo = grupo;
    }

    public int getPuntos() {
        return puntos;
    }

    public void setPuntos(int puntos) {
        this.puntos = puntos;
    }

    public String getNumeroDeControl() {
        return numeroDeControl;
    }

    public void setNumeroDeControl(String numeroDeControl) {
        this.numeroDeControl = numeroDeControl;
    }

    public Collection<TrIncidente> getTrIncidenteCollection() {
        return trIncidenteCollection;
    }

    public void setTrIncidenteCollection(Collection<TrIncidente> trIncidenteCollection) {
        this.trIncidenteCollection = trIncidenteCollection;
    }

    public Integer getIdUsuario() {
        return idUsuario;
    }

    public void setIdUsuario(Integer idUsuario) {
        this.idUsuario = idUsuario;
    }

    @Override
    public int hashCode() {
        int hash = 0;
        hash += (idAlumno != null ? idAlumno.hashCode() : 0);
        return hash;
    }

    @Override
    public boolean equals(Object object) {
        // TODO: Warning - this method won't work in the case the id fields are not set
        if (!(object instanceof TrAlumno)) {
            return false;
        }
        TrAlumno other = (TrAlumno) object;
        if ((this.idAlumno == null && other.idAlumno != null) || (this.idAlumno != null && !this.idAlumno.equals(other.idAlumno))) {
            return false;
        }
        return true;
    }

    @Override
    public String toString() {
        return "controldepuntos.clases.TrAlumno[ idAlumno=" + idAlumno + " ]";
    }
    
    public ResultSet getAlumnoListResultSet(){
        try{
            Statement stm;
            ResultSet rs;
            String SQL="SELECT id_alumno, numero_de_control as NoControl, nombre as Nombre, ap_paterno as Apellido1, ap_materno as Apellido2, grado as Grado, grupo as Grupo FROM tr_alumno WHERE activo=1";
            DataBase d = new DataBase();
            Connection con = d.conectar();
            stm=con.createStatement();
            rs=stm.executeQuery(SQL);
            //return rs;
            if(rs!=null){
                return rs;
            }
            return null;
        }catch(Exception ex){
            JOptionPane.showMessageDialog(AdministradorVentanas.pantallaAlumnos, ex.getMessage());
            return null;
        }
        
    }
    
    public void insertarAlumno(TrAlumno nuevoAlumno){
         try{
            Statement stm;
            Connection con;
            String SQL="INSERT INTO tr_alumno (nombre, ap_materno, ap_paterno, numero_de_control, grado, grupo, puntos, id_usuario, activo) values"
                    + " ('"+nuevoAlumno.getNombre()+"','"+nuevoAlumno.getApMaterno()+"','"+nuevoAlumno.getApPaterno()+"','"+nuevoAlumno.getNumeroDeControl()+"',"+nuevoAlumno.getGrado()+",'"+nuevoAlumno.getGrupo()+"',100,"+nuevoAlumno.getIdUsuario()+",1)";
            //JOptionPane.showMessageDialog(null, SQL);
            DataBase db = new DataBase();
            con=db.conectar();
            stm=con.createStatement();
            int correcto = stm.executeUpdate(SQL);
            if(correcto>0){
                JOptionPane.showMessageDialog(AdministradorVentanas.pantallaAlumnos, "Alumno agregado satisfactoriamente","Éxito",JOptionPane.INFORMATION_MESSAGE);
                //ARCatalogoFalta pantalla = new ARCatalogoFalta();
                //pantalla.cargaCatalogoReglamento();
                AdministradorVentanas.ocultarPantallaNuevoAlumno();
                //Resetear pantalla de alumnos para que se actualice el grid de alumnos
                AdministradorVentanas.pantallaAlumnos=null;
                AdministradorVentanas.mostrarPantallaAlumnos();
            }
         }catch(Exception ex){
             JOptionPane.showMessageDialog(AdministradorVentanas.pantallaAlumnos, "Lo sentimos, Ocurrió un error."+ex.getMessage());
         }
         
     }
    
    public static Integer buscarIdUsuarioPorNombreDeUsuario(String numeroDeControl){
        try{
            Statement stm;
            ResultSet rs;
            Integer idEncontrado=null;
            String SQL="SELECT id_usuario FROM tr_usuario WHERE usuario='"+numeroDeControl+"'";
            DataBase d = new DataBase();
            Connection con = d.conectar();
            stm=con.createStatement();
            rs=stm.executeQuery(SQL);
            //return rs;
            if(rs.next()){
                idEncontrado=rs.getInt("id_usuario");
            }
            return idEncontrado;
        }catch(Exception ex){
            JOptionPane.showMessageDialog(AdministradorVentanas.pantallaAlumnos, ex.getMessage());
            return null;
        }
        
    }
    
    public void eliminarAlumno(TrAlumno alumnoAEliminar){
         try{
            Statement stm;
            Connection con;
            String SQL="UPDATE tr_alumno set activo=0 WHERE id_alumno="+alumnoAEliminar.getIdAlumno();
            //JOptionPane.showMessageDialog(null, SQL);
            DataBase db = new DataBase();
            con=db.conectar();
            stm=con.createStatement();
            int correcto = stm.executeUpdate(SQL);
            if(correcto>0){
                JOptionPane.showMessageDialog(AdministradorVentanas.pantallaAlumnos, "Alumno dado de baja satisfactoriamente","Éxito",JOptionPane.INFORMATION_MESSAGE);
                AdministradorVentanas.ocultarPantallaAlumnos();
                AdministradorVentanas.pantallaAlumnos=null;
                AdministradorVentanas.mostrarPantallaAlumnos();
            }
         }catch(Exception ex){
             JOptionPane.showMessageDialog(AdministradorVentanas.pantallaAlumnos, "Lo sentimos, Ocurrió un error."+ex.getMessage(),"Error",JOptionPane.ERROR_MESSAGE);
         }
    }
    
    public TrAlumno seleccionarPorId(String id){
         try{
            TrAlumno alumnoEncontrado=null;
            Statement stm;
            Connection con;
            String SQL="SELECT nombre, ap_paterno, ap_materno, grado, grupo, numero_de_control, puntos, id_usuario FROM tr_alumno WHERE id_alumno="+id;
            ResultSet rs;
            //JOptionPane.showMessageDialog(null, SQL);
            DataBase db = new DataBase();
            con=db.conectar();
            stm=con.createStatement();
            rs = stm.executeQuery(SQL);
            while(rs.next()){
                alumnoEncontrado=new TrAlumno();
                alumnoEncontrado.nombre=rs.getString("nombre");
                alumnoEncontrado.apPaterno=rs.getString("ap_paterno");
                alumnoEncontrado.apMaterno=rs.getString("ap_materno");
                alumnoEncontrado.grado=rs.getInt("grado");
                alumnoEncontrado.grupo=rs.getString("grupo");
                alumnoEncontrado.numeroDeControl=rs.getString("numero_de_control");
                alumnoEncontrado.idUsuario=rs.getInt("id_usuario");
            }
            return alumnoEncontrado;
            
         }catch(Exception ex){
             JOptionPane.showMessageDialog(AdministradorVentanas.pantallaAlumnos, "Lo sentimos, Ocurrió un error. TrAlumno.seleccionarPorId"+ex.getMessage()+ex.getStackTrace(),"Error",JOptionPane.ERROR_MESSAGE);
             return null;
         }
    }
    public TrAlumno seleccionarPorNumeroDeControl(String numeroDeControl){
         try{
            TrAlumno alumnoEncontrado=null;
            Statement stm;
            Connection con;
            String SQL="SELECT nombre, ap_paterno, ap_materno, grado, grupo, numero_de_control FROM tr_alumno WHERE numero_de_control='"+numeroDeControl+"'";
            ResultSet rs;
            //JOptionPane.showMessageDialog(null, SQL);
            DataBase db = new DataBase();
            con=db.conectar();
            stm=con.createStatement();
            rs = stm.executeQuery(SQL);
            while(rs.next()){
                alumnoEncontrado=new TrAlumno();
                alumnoEncontrado.nombre=rs.getString("nombre");
                alumnoEncontrado.apPaterno=rs.getString("ap_paterno");
                alumnoEncontrado.apMaterno=rs.getString("ap_materno");
                alumnoEncontrado.grado=rs.getInt("grado");
                alumnoEncontrado.grupo=rs.getString("grupo");
                alumnoEncontrado.numeroDeControl=rs.getString("numero_de_control");
                
            }
            return alumnoEncontrado;
            
         }catch(Exception ex){
             JOptionPane.showMessageDialog(AdministradorVentanas.pantallaModificarIncidencia, "Lo sentimos, Ocurrió un error. TcReglamento.seleccionarPorId"+ex.getMessage()+ex.getStackTrace(),"Error",JOptionPane.ERROR_MESSAGE);
             return null;
         }
    }
    public void modificarAlumno(TrAlumno alumnoAModificar){
         try{
            Statement stm;
            Connection con;
            String SQL="UPDATE tr_alumno set nombre='"+alumnoAModificar.getNombre()
                       +"', ap_paterno='"+alumnoAModificar.getApPaterno()+"', ap_materno='"+alumnoAModificar.getApMaterno()
                       +"', grado="+alumnoAModificar.getGrado()+", grupo='"+alumnoAModificar.getGrupo()+"'"
                       + ", numero_de_control='"+alumnoAModificar.getNumeroDeControl()+"' WHERE id_alumno="+alumnoAModificar.getIdAlumno();
            //JOptionPane.showMessageDialog(null, SQL);
            DataBase db = new DataBase();
            con=db.conectar();
            stm=con.createStatement();
            int correcto = stm.executeUpdate(SQL);
            if(correcto>0){
                JOptionPane.showMessageDialog(AdministradorVentanas.pantallaAlumnos, "Alumno modificado correctamente","Éxito",JOptionPane.INFORMATION_MESSAGE);
                AdministradorVentanas.ocultarPantallaAlumnos();
                AdministradorVentanas.pantallaAlumnos=null;
                AdministradorVentanas.mostrarPantallaAlumnos();
            }
         }catch(Exception ex){
             JOptionPane.showMessageDialog(AdministradorVentanas.pantallaAlumnos, "Lo sentimos, Ocurrió un error."+ex.getMessage(),"Error",JOptionPane.ERROR_MESSAGE);
         }
     }
    
    public ResultSet buscarAlumnoPorIdNombreResultSet(String numeroDeControl){
        try{
            Statement stm;
            ResultSet rs;
            String SQL="SELECT id_alumno, nombre, ap_materno, ap_paterno, numero_de_control, grado, grupo, puntos FROM tr_alumno WHERE numero_de_control='"+numeroDeControl+"' AND activo=1";
            DataBase d = new DataBase();
            Connection con = d.conectar();
            stm=con.createStatement();
            rs=stm.executeQuery(SQL);
            //return rs;
            if(rs!=null){
                return rs;
            }
            return null;
        }catch(Exception ex){
            JOptionPane.showMessageDialog(AdministradorVentanas.pantallaAlumnos, ex.getMessage(),"Error",JOptionPane.ERROR_MESSAGE);
            return null;
        }
        
    }
    
}
